package com.example.flex.resolver.ipAddress;

import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;

/**
 * @Author: 不是菜鸡爱编程
 * @Date: 2023/11/01/8:11
 * @Description:
 */
@Component
public class IpAddressArgumentResolver implements HandlerMethodArgumentResolver {
    /**
     * 是否能使用当前的参数解析器进行解析
     * @return 是否进行解析
     */
    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        // 如果参数上有CurrentUserId注解，则可以被解析，如果不包含，则不能被解析
        return parameter.hasParameterAnnotation(CurrentIpAddress.class);
    }

    /**
     * 进行参数解析的方法，可以在方法中获取对应的数据，然后把数据作为返回值返回，方法的返回值就会赋值给对应的方法参数
     */
    @Override
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
        return null;
    }
}